﻿/*----------------------------------------------------------------
//  <copyright file="IEmailSender.cs" company="MicroCloud@151504200868">
//      Copyright © 2020-2024 MicroCloud Corporation, All rights reserved.
//  </copyright>
//  <site>https://gitee.com/chenmm123/microclouds</site>
//  <last-editor>cmm</last-editor>
//  <last-date>2023-02-20 16:11</last-date>
//----------------------------------------------------------------*/

namespace MicroCloud
{
    #region "Email发送功能接口"
    /// <summary>
    /// Email发送功能接口
    /// </summary>
    public interface IEmailSender
    {
        #region "方法"
        #region "发送邮件"
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文内容</param>
        /// <param name="bodyFormat">邮件正文格式</param>
        /// <param name="attachments">邮件附件</param>
        /// <param name="toEmails">收件人</param>
        /// <param name="ccEmails">抄送</param>
        /// <param name="bccEmails">密送</param>
        /// <param name="options">邮件配置信息</param>
        void SendEmail(string subject, string body, EmailBodyFormat bodyFormat, EmailAttachmentDto[] attachments, string[] toEmails, string[] ccEmails, string[] bccEmails, EmailSenderOptions options = null);
        #endregion
        #region "发送邮件"
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文内容</param>
        /// <param name="bodyFormat">邮件正文格式</param>
        /// <param name="attachments">邮件附件</param>
        /// <param name="toEmails">收件人</param>
        /// <param name="ccEmails">抄送</param>
        /// <param name="options">邮件配置信息</param>
        void SendEmail(string subject, string body, EmailBodyFormat bodyFormat, EmailAttachmentDto[] attachments, string[] toEmails, string[] ccEmails, EmailSenderOptions options = null);
        #endregion
        #region "发送邮件"
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文内容</param>
        /// <param name="bodyFormat">邮件正文格式</param>
        /// <param name="attachments">邮件附件</param>
        /// <param name="options">邮件配置信息</param>
        /// <param name="toEmails">收件人</param>
        void SendEmail(string subject, string body, EmailBodyFormat bodyFormat, EmailAttachmentDto[] attachments, EmailSenderOptions options, params string[] toEmails);
        #endregion
        #region "发送邮件"
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文内容</param>
        /// <param name="bodyFormat">邮件正文格式</param>
        /// <param name="attachments">邮件附件</param>
        /// <param name="toEmails">收件人</param>
        void SendEmail(string subject, string body, EmailBodyFormat bodyFormat, EmailAttachmentDto[] attachments, params string[] toEmails);
        #endregion
        #region "发送邮件"
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文内容</param>
        /// <param name="bodyFormat">邮件正文格式</param>
        /// <param name="toEmails">收件人</param>
        /// <param name="ccEmails">抄送</param>
        /// <param name="bccEmails">密送</param>
        /// <param name="options">邮件配置信息</param>
        void SendEmail(string subject, string body, EmailBodyFormat bodyFormat, string[] toEmails, string[] ccEmails, string[] bccEmails, EmailSenderOptions options = null);
        #endregion
        #region "发送邮件"
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文内容</param>
        /// <param name="bodyFormat">邮件正文格式</param>
        /// <param name="toEmails">收件人</param>
        /// <param name="ccEmails">抄送</param>
        /// <param name="options">邮件配置信息</param>
        void SendEmail(string subject, string body, EmailBodyFormat bodyFormat, string[] toEmails, string[] ccEmails, EmailSenderOptions options = null);
        #endregion
        #region "发送邮件"
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文内容</param>
        /// <param name="bodyFormat">邮件正文格式</param>
        /// <param name="options">邮件配置信息</param>
        /// <param name="toEmails">收件人</param>
        void SendEmail(string subject, string body, EmailBodyFormat bodyFormat, EmailSenderOptions options, params string[] toEmails);
        #endregion
        #region "发送邮件"
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文内容</param>
        /// <param name="bodyFormat">邮件正文格式</param>
        /// <param name="toEmails">收件人</param>
        void SendEmail(string subject, string body, EmailBodyFormat bodyFormat, params string[] toEmails);
        #endregion
        #region "发送邮件"
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="options">邮件配置信息</param>
        /// <param name="dtos">邮件发送DTO</param>
        void SendEmail(EmailSenderOptions options, params EmailSendDto[] dtos);
        #endregion
        #region "发送邮件"
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="dtos">邮件发送DTO</param>
        void SendEmail(params EmailSendDto[] dtos);
        #endregion

        #region "异步发送邮件"
        /// <summary>
        /// 异步发送邮件
        /// </summary>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文内容</param>
        /// <param name="bodyFormat">邮件正文格式</param>
        /// <param name="attachments">邮件附件</param>
        /// <param name="toEmails">收件人</param>
        /// <param name="ccEmails">抄送</param>
        /// <param name="bccEmails">密送</param>
        /// <param name="options">邮件配置信息</param>
        Task SendEmailAsync(string subject, string body, EmailBodyFormat bodyFormat, EmailAttachmentDto[] attachments, string[] toEmails, string[] ccEmails, string[] bccEmails, EmailSenderOptions options = null);
        #endregion
        #region "异步发送邮件"
        /// <summary>
        /// 异步发送邮件
        /// </summary>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文内容</param>
        /// <param name="bodyFormat">邮件正文格式</param>
        /// <param name="attachments">邮件附件</param>
        /// <param name="toEmails">收件人</param>
        /// <param name="ccEmails">抄送</param>
        /// <param name="options">邮件配置信息</param>
        Task SendEmailAsync(string subject, string body, EmailBodyFormat bodyFormat, EmailAttachmentDto[] attachments, string[] toEmails, string[] ccEmails, EmailSenderOptions options = null);
        #endregion
        #region "异步发送邮件"
        /// <summary>
        /// 异步发送邮件
        /// </summary>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文内容</param>
        /// <param name="bodyFormat">邮件正文格式</param>
        /// <param name="attachments">邮件附件</param>
        /// <param name="options">邮件配置信息</param>
        /// <param name="toEmails">收件人</param>
        Task SendEmailAsync(string subject, string body, EmailBodyFormat bodyFormat, EmailAttachmentDto[] attachments, EmailSenderOptions options, params string[] toEmails);
        #endregion
        #region "异步发送邮件"
        /// <summary>
        /// 异步发送邮件
        /// </summary>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文内容</param>
        /// <param name="bodyFormat">邮件正文格式</param>
        /// <param name="attachments">邮件附件</param>
        /// <param name="toEmails">收件人</param>
        Task SendEmailAsync(string subject, string body, EmailBodyFormat bodyFormat, EmailAttachmentDto[] attachments, params string[] toEmails);
        #endregion
        #region "异步发送邮件"
        /// <summary>
        /// 异步发送邮件
        /// </summary>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文内容</param>
        /// <param name="bodyFormat">邮件正文格式</param>
        /// <param name="toEmails">收件人</param>
        /// <param name="ccEmails">抄送</param>
        /// <param name="bccEmails">密送</param>
        /// <param name="options">邮件配置信息</param>
        Task SendEmailAsync(string subject, string body, EmailBodyFormat bodyFormat, string[] toEmails, string[] ccEmails, string[] bccEmails, EmailSenderOptions options = null);
        #endregion
        #region "异步发送邮件"
        /// <summary>
        /// 异步发送邮件
        /// </summary>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文内容</param>
        /// <param name="bodyFormat">邮件正文格式</param>
        /// <param name="toEmails">收件人</param>
        /// <param name="ccEmails">抄送</param>
        /// <param name="options">邮件配置信息</param>
        Task SendEmailAsync(string subject, string body, EmailBodyFormat bodyFormat, string[] toEmails, string[] ccEmails, EmailSenderOptions options = null);
        #endregion
        #region "异步发送邮件"
        /// <summary>
        /// 异步发送邮件
        /// </summary>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文内容</param>
        /// <param name="bodyFormat">邮件正文格式</param>
        /// <param name="options">邮件配置信息</param>
        /// <param name="toEmails">收件人</param>
        Task SendEmailAsync(string subject, string body, EmailBodyFormat bodyFormat, EmailSenderOptions options, params string[] toEmails);
        #endregion
        #region "异步发送邮件"
        /// <summary>
        /// 异步发送邮件
        /// </summary>
        /// <param name="subject">邮件主题</param>
        /// <param name="body">邮件正文内容</param>
        /// <param name="bodyFormat">邮件正文格式</param>
        /// <param name="toEmails">收件人</param>
        Task SendEmailAsync(string subject, string body, EmailBodyFormat bodyFormat, params string[] toEmails);
        #endregion
        #region "异步发送邮件"
        /// <summary>
        /// 异步发送邮件
        /// </summary>
        /// <param name="options">邮件配置信息</param>
        /// <param name="dtos">邮件发送DTO</param>
        Task SendEmailAsync(EmailSenderOptions options, params EmailSendDto[] dtos);
        #endregion
        #region "异步发送邮件"
        /// <summary>
        /// 异步发送邮件
        /// </summary>
        /// <param name="dtos">邮件发送DTO</param>
        Task SendEmailAsync(params EmailSendDto[] dtos);
        #endregion

        #endregion

    }
    #endregion

}
